package com.adong.config;

import com.adong.conditional.MyConditional;
import com.adong.pojo.Car;
import com.adong.pojo.CarFactoryBean;
import com.adong.pojo.User;
import org.springframework.context.annotation.*;


/**
 * @author adong
 * 配置类,用来代替application.xml配置文件
 */

@Configuration //标注是配置类
@Import({Car.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class}) //id默认给是组件的全类名 : com.adong.pojo.Car
//@Import({Car.class,house.class})//导入多个组件

public class ApplicationConfig2 {

    /**
     * * @Scope:调整作用域
     * * prototype：多实例的：ioc容器启动并不会去调用方法创建对象放在容器中。每次getBean()才会调用方法创建对象；
     * * singleton：单实例的（默认值）：ioc容器启动会调用方法创建对象放到ioc容器中。以后每次获取就是直接从容器（map.get()）中拿，
     * * request：同一次请求创建一个实例
     * * session：同一个session创建一个实例
     * 懒加载:对于singleton单例来说的:
     * 单例容器启动就会创建对象--->我们让他getBean()才会去创建初始化创建对象,单实例只会创建一次
     *
     * @return
     */
    @Scope("singleton")
    @Lazy
    @Bean
    public User user() {
        return new User(2, "flynn");
    }

    @Bean("alibaba")
    public User user1() {
        return new User(2, "马云");
    }

    @Bean("tencent")
    @Conditional(MyConditional.class) //根据自定的Condition接口的实现类判断,满足条件注册bean
    public User user2() {
        return new User(2, "马化腾");
    }


    @Bean
    public CarFactoryBean factoryBean() {
        return new CarFactoryBean();
    }

}
